package top.kaoshanji.p4ch25b;

/**
 * 代码清单-p4ch25b-313页b：访问者实现
 * @author kaoshanji
 * ^_^
 * create time 2025/3/27 10:01
 */
public class Visitor implements IVisitor {

    // ----------对外的公共方法：主要功能-----------

    @Override
    public void visit(CommonEmployee commonEmployee) {
        System.out.println(this.getCommonEmployee(commonEmployee));
    }

    @Override
    public void visit(Manager manager) {
        System.out.println(this.getManagerInfo(manager));
    }

    // 类的主要功能是由 public 修饰的方法，这是对外的，定位是API，影响范围无法控制，禁止修改，要修改的话就定义一个新方法（即使是类似）
    // private 方法是实现细节，这是对内的，可以改进变化，影响范围就局限于此类中

    // ----------对内的的私有方法：实现细节-----------

    // 组装出基本信息..基本..基本..就是共有的..那么就是可以被广泛的适用
    private String getBasicInfo(Employee employee) {
        String info = "姓名：" + employee.getName() + "\t";
        info = info + "性别：" + (employee.getSex() == Employee.FEMALE ? "女":"男") + "\t";
        info = info + "薪水：" + employee.getSalary() + "\t";

        return info;
    }

    // 组装出部门经理的信息..具备自己的信息，这是独有的
    private String getManagerInfo(Manager manager) {
        String basicInfo = this.getBasicInfo(manager);
        String otherInfo = "业绩：" + manager.getPerformance() + "\t";
        return basicInfo + otherInfo;
    }

    // 组装出普通员工信息..具备自己的信息，这是独有的
    public String getCommonEmployee(CommonEmployee commonEmployee) {
        String basicInfo = this.getBasicInfo(commonEmployee);
        String otherInfo = "工作：" + commonEmployee.getJob() + "\t";
        return basicInfo + otherInfo;
    }

}
